const jwt = require('jsonwebtoken');

const auth = async (req, res, next) => {
  try {
    console.log('🔐 Auth middleware called');
    
    // 从请求头获取token
    const authHeader = req.header('Authorization');
    console.log('🔐 Authorization header:', authHeader);
    
    if (!authHeader || !authHeader.startsWith('Bearer ')) {
      return res.status(401).json({
        success: false,
        message: '访问被拒绝，未提供有效的token格式'
      });
    }

    const token = authHeader.replace('Bearer ', '');
    console.log('🔐 Token:', token.substring(0, 20) + '...'); // 只打印前20个字符

    if (!token) {
      return res.status(401).json({
        success: false,
        message: '访问被拒绝，未提供token'
      });
    }

    // 验证token
    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    console.log('✅ Token验证成功，用户信息:', {
      id: decoded.id,
      phone: decoded.phone,
      city: decoded.city
    });
    
    // 将用户信息添加到请求对象
    req.user = decoded;
    
    next();
  } catch (error) {
    console.error('❌ Token验证失败:', error.message);
    
    if (error.name === 'JsonWebTokenError') {
      return res.status(401).json({
        success: false,
        message: 'Token无效'
      });
    }
    
    if (error.name === 'TokenExpiredError') {
      return res.status(401).json({
        success: false,
        message: 'Token已过期'
      });
    }
    
    res.status(401).json({
      success: false,
      message: '认证失败'
    });
  }
};

module.exports = { auth };